import Vue from 'vue';
import VueRouter from 'vue-router';
// 引入routes文件
import routes from "./routes"

Vue.use(VueRouter);
import store from '@/store/store';

// 防止多次点击相同的触发警告
// 把VueRouter原型对象的push，想保存一份
let originPush = VueRouter.prototype.push;
let originReplace = VueRouter.prototype.replace;
// 重写push|replace
// 第一个参数：告诉原来push方法，你往哪里跳转（传递哪些参数）
VueRouter.prototype.push = function (location, resolve, reject) {
    if (resolve && reject) {
        // call||aooly
        // 相同点：都可以调用函数一次，都可以篡改函数的上下文一次
        // 不同点：call与apply传递参数：call传递参数用逗号隔开，apply方法执行，传递数组
        originPush.call(this, location, resolve, reject)
    } else {
        //如果没有resolve或者reject
        originPush.call(this, location, () => { }, () => { })

    }
}
VueRouter.prototype.replace = function (location, resolve, reject) {
    if (resolve && reject) {
        // call||aooly
        // 相同点：都可以调用函数一次，都可以篡改函数的上下文一次
        // 不同点：call与apply传递参数：call传递参数用逗号隔开，apply方法执行，传递数组
        originReplace.call(this, location, resolve, reject)
    } else {
        //如果没有resolve或者reject
        originReplace.call(this, location, () => { }, () => { })

    }
}

let router = new VueRouter({
    routes: routes,
    // 滚动行为
    scrollBehavior(to, from, savedPosition) {
        return {
            // 距离顶部0像素
            y: 0
        }
    }
})

// 全局守卫
router.beforeEach(async (to, from, next) => {
    let token = store.state.user.token
    let name = store.state.user.userInfo.name

    // 用户已经登录
    if (token) {
        // 如果用户已经登录但是去 login 
        if (to.path == '/login') {
            return next('/home');
        } else {
            // 用户登录了， 但是去的不是login
            // 如果用户名已经有了
            if (name) {
                next();
            } else {
                // 登录了，没有用户信息 ,派发action 让仓库存储用户信息
                try {
                    await store.dispatch('getUserInfo')
                    next();
                } catch (error) {
                    // token失效了 获取不到用户信息  清除token 
                    await store.dispatch('userLogout')
                }
            }
        }
    } else {
        // 未登录 不能去交易相关
        // let toPath = to.path;
        // const arr = ['/myorder', '/trade', '/pay', '/paysuccess', '/center'];
        // let isMatched = false;

        // arr.forEach((item) => {
        //     if (item === toPath) {
        //         isMatched = true;
        //     }
        // });

        // if (isMatched) {
        //     next('/login');
        // } else {
        //     next();
        // }

        let toPath = to.path;
        const arr = ['/myorder', '/trade', '/pay', '/paysuccess', '/center'];
        // 把未登录先去没去的地址存起来
        if (arr.includes(toPath)) {
            next('/login?redirect=' + toPath);
        } else {
            next();
        }
    }
});

export default router